package elion.com.theElion.util;

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Alex on 2017/6/9.
 */

public class JsonUtils
{
    /**
     *
     * @param className 要生成的bean类名
     * @param json json字符串
     * @return className类型的链表
     * @throws Exception
     */
    public static Object jsonToList(String className,String json) throws Exception {
        //获取字段名
        String[] names = ReflectUtil.getFieldsNames(className);
        //新实例
        Object obj ;
        JSONObject object;
        //实例列表
        List<Object> list = new ArrayList<>();
        try {
            //Json数组
            JSONArray array = new JSONArray(json);
            //Json解析
            for(int i = 0 ; i < array.length();i ++){
                obj =  Class.forName(className).newInstance();
                object = array.getJSONObject(i);
                obj = jsonToData(obj,names,object);
                list.add(obj);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     *
     * @param obj 需要设置参数的对象
     * @param names 对象的字段名
     * @param object JSONObject
     * @return  参数设置完成的对象
     * @throws Exception
     */
    private static Object jsonToData(Object obj,String[] names,JSONObject object) throws Exception {
        String data;
//        Log.e( "jsonToData", object.toString());
        for(String str:names){
            data = object.getString(str);
            System.out.println(str + " : " + data);
            ReflectUtil.useSetMethod(obj,str,data);
        }
        return obj;
    }
}
